查看原文
其他

Stata 代码太长怎么办?这些换行技巧你需要知道

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:张   迪,中南财经政法大学金融学院

本文编辑:张   猛

技术总编:方一卓


Stata&Python云端课程来啦!

好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~


1.导读

我们使用 Stata 写代码的时候,有时会发现代码太长一行写不下,有时在学习课程的时候发现自己写的代码跟老师一模一样,但是运行却出现了问题,如下面代码所示,这是因为我们可能忽略了代码换行的问题。本篇推文就来帮助大家了解和解决换行的相关问题,帮助大家顺利运行长代码。

copy"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml" temp.txt,replace* 注意:此代码是本篇推文的示例,直接运行会报错。

直接在命令窗口复制上述代码,运行会出现:

从结果窗口报错的结果我们可以看出,Stata 执行命令时,把上述命令的内容分别当成三行命令在执行。 
而实际上,除了copy是 Stata 可识别的命令,http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace都不是命令,这二者都只是copy命令所需的网址和保存的文件名。  
也就是说,copy、http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace本应该写在同一行,而我们的示例代码却写成了三行,这正是忽略了换行标识符所导致的问题。 

  同样,把上述命令复制到 dofile 文件中,全部选中并运行,会出现下面的结果: 

从结果窗口报错的结果我们可以看出,Stata 执行命令时,并没有运行我们选中的三行代码,仅运行完第1行copy命令,就因为copy的格式书写不规范不完善而报错,并未继续运行下面两行的代码。这同样是忽略了换行标识符所导致的问题。    怎么解决换行问题呢?接下来,本篇推文将详细介绍换行方法。

 
2.自动换行


Stata15 及以前的版本无自动换行功能,Stata16 增添了自动换行功能,我们现在所使用较多的Stata17 也具有这个功能。 

copy "http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/000001.phtml" temp.txt,replace* 此代码直接复制到命令窗口也可运行出结果,本例着重讲dofile文件中的换行问题。

复制上面的命令至 dofile 文件中,因为代码过长,可能会出现如下图所示内:

这个就是自动换行的示例图,第1行和第2行之间出现了两个拐弯的小箭头,并各占了一行,这说明第1行代码包括第1行对应的copy以及第1行和第2行之间两个拐弯的小箭头所指行的http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace。也就是说,第1行和两个拐弯的小箭头所指行本质是一行,只是因为一行写不下,Stata做了自动换行。

自动换行的本质是长代码虽显示在不同的代码行,但实际上是同一行,这也意味着运行代码时并不要求选中全部代码才能运行,只选择其部分行代码,整条代码会自动全部选中并运行。
关于 Stata 自动换行功能,由于其方便快捷性,现如今编者自己使用也较多,大家只需要认识自动换行的标识就行。 

3.手动换行
常见的换行方法有三种,接下来将详细介绍。
01

在行尾使用 ///

在行尾加上三条斜杠 /// 可实现手动换行。 但是要注意: 
    • /// 之前至少需要加一个空格。

    • 需要同时选中手动换行的代码,再运行。 

copy ///"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/000001.phtml" ///temp.txt,replace* 此代码直接复制到命令窗口运行也会报错,命令窗口识别不了 /// 的换行作用,而dofile文件内可识别 /// 的换行作用。
复制上面的命令至 dofile 文件中,因为代码过长,可能会出现如下图所示内容:

  我们发现,自己输入/// 手动换行的结果不同于上述自动换行,这是因为copy、http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace分别属于第1行、第2行和第3行,并没有自动换行中“拐弯的小箭头”。    

那么如何将这独立的三行联系起来,让 Stata 识别其为同一命令下语法(Syntax)的填充内容,而不是三行单独为命令行呢?Stata 为我们提供了很好的工具。行尾加 /// 为其中一个工具。    
因为手动换行将命令分离成多行,需要选中全部代码行才能运行出结果。如在上图示例中,需要选中第1行、第2行和第3行,再运行才能得出结果。    
行尾加 /// 的方式使用也较为便捷,使用者也较多。 

02

第一行行尾使用/*,第二行行首使用*/
这种方法是把需要手动断行的内容每两行分为一组进行处理,第一行行尾加上 /*,第二行行首加上 */ 。 
但是要注意: 
    • 需要同时选中手动换行的代码,再运行。 

copy/**/"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/000001.phtml"/**/temp.txt,replace* 此代码直接复制到命令窗口运行也会报错,命令窗口识别不了此类换行符的换行作用,而dofile文件内可识别。 复制上面的命令至 dofile 文件中,因为代码过长,可能会出现如下图所示内容:

我们发现该方法的换行的结果也不同于上述自动换行,这是也是因为copy、http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace分别属于第1行、第2行和第3行,并没有自动换行中“拐弯的小箭头”。    如上图所示,把第1行和第2行当做一组,在第1行行尾加上/*,在第2行行首加上*/。那么还剩第3行要怎么处理呢?此时可把第2行、第3行当做一组,在第2行行尾加上/*,在第3行行首加上*/,如此便完成了手动换行。    因为手动换行将命令分离成多行,需要选中全部代码行才能运行出结果。如在上图示例中,需要选中第1行、第2行和第3行,再运行才能得出结果。    该方式使用需要对每一行都有所处理,用起来较麻烦,使用相对较少。
03

使用#delimit; 以及 #delimit cr 组合
这种方法有固定的格式,首行为#delimit;,末行为#delimit cr,首行与末行之间为需要手动换行的内容,手动换行的内容结束后需要加上分号;。 
但是要注意: 
    • 需要同时选中手动换行的代码,再运行。 

     格式如下:

#delimit;command;#delimit cr
//#delimit 可以简写为 #d#d ;command;#d cr
#delimit;copy"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/000001.phtml"temp.txt,replace;#delimit cr* 此代码直接复制到命令窗口运行也会报错,命令窗口识别不了此类换行符的换行作用,而dofile文件内可识别。

复制上面的命令至 dofile 文件中,因为代码过长,可能会出现如下图所示内容:

  我们发现该方法的换行的结果也不同于上述自动换行,这是也是因为copy、http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManger/stockid/000001.phtml和temp.txt,replace分别属于第1行、第2行和第3行,并没有自动换行中“拐弯的小箭头”。    

如上图所示,第1行为#delimit;,末行第5行为#delimit cr,手动换行结束的第4行尾有;    
因为手动换行将命令分离成多行,需要选中全部代码行才能运行出结果。如在上图示例中,需要同时选中第1行至第5行,再运行才能得出结果。该方式在画图和输出结果时,使用较多,因为能使代码看起来整齐美观,如下例所示。
sysuse "auto", clear#delimit ;twoway (scatter price wei) (lfit price wei), title("散点图和线性拟合图");#delimit cr


4.小结


四种换行方法归纳和使用对比: 

以上就是 Stata 换行的基本介绍,通过多种换行方式在应用中的对比,有助于我们在实际研究中适时选择合适自己的换行命令。


END
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

爬虫俱乐部的精彩答疑--花式重命名变量

      今天你还是“刘畊宏女孩”吗?

爬虫俱乐部在山东财经大学金融学院暑期Stata网课上的精彩答疑

JupyterNotebook——如何更换默认文档目录

Stata绘图系列——玩转绘图通用选项(一)

出人意料!这所大学的A级学科总数竟超越清华北大!

Stata数据读入——打开方式不同?

数据类型——Dict、Set与Frozenset简析

Stata小贴士之外部命令安装路径

有一种夏天叫做宫崎骏的夏天

换装术|多个Excel文件如何一键转为dta格式

【基础篇】Python可变对象与不可变对象

Stata绘图系列——细节掌控绘图区域!

 4月A股的收官战之概念板块哪家强?

解放双手!你必须要会的两个命令—inlist & inlist2

【基础篇】字符串之判断方法

Stata绘图系列——让你的直方图随心所欲

【爬虫篇】湖人无缘季后赛,球迷如何回应

客官,要来份四象限图吗?

Python实现简繁体转换


关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存